#ifndef PACKAGEDATA_H
#define PACKAGEDATA_H

#include <QObject>
#include <QString>
#include <QStringList>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>

class PackageData : public QObject
{
    Q_OBJECT
public:
    /**
     * @brief  PackageData构造函数
     */
    explicit PackageData(QObject *parent = nullptr);
    /**
     * @brief  PackageData析构函数
     */
    ~PackageData();

    /**
     * @brief  数据完整封装
     * @param  dataMap 封装数据库操作数据时需包含'data'嵌套的json结构
     * @param  infomap 封装的基本协议数据
     * @param  function_code 功能号
     * @param  requestId 协议指令唯一id
     * @param  is_data 是否包含数据库操作函数
     * @return 应输包含封装好的QByteArray容器
     */
    QByteArray convertToJson(const QMap<QString, QVariant> &datamap,
                             const QMap<QString, QVariant> &infomap,
                             int functionCode,
                             const QString &requestId,
                             bool is_data);

    void convertFromJson(const QJsonObject &obj);

private:
    /**
     * @brief  数据分级封装
     * @param  dataMap 封装数据库操作数据时需包含'data'嵌套的json结构
     * @param  infomap 封装的基本协议数据
     * @param  requestId 协议指令唯一id
     * @param  is_data 是否包含数据库操作函数
     * @return 应输包含封装好的QJsonObject容器
     */
    QJsonObject createJsonObject(const QMap<QString, QVariant> &datamap,
                                 const QMap<QString, QVariant> &infomap,
                                 const QString &requestId,
                                 bool is_data);
};

#endif // PACKAGEDATA_H
